package com.xingchi.tornado.log.model.dto;

import com.xingchi.tornado.model.BaseDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

/**
 * <p>
 * 操作日志数据传输对象
 * </p>
 *
 * @author xingchi
 * @date 2024-09-26 17:13
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Schema(name = "OperateLogDTO", description = "操作日志数据")
public class OperateLogDTO extends BaseDTO {

    /**
     * 模块名称
     */
    @Schema(description = "模块名称")
    private String moduleName;

    /**
     * 操作
     */
    @Schema(description = "操作")
    private String operate;

    /**
     * 操作方法
     */
    @Schema(description = "操作方法")
    private String operateMethod;

    /**
     * 请求参数
     */
    @Schema(description = "请求参数")
    private String requestParameter;

    /**
     * 请求路径参数
     */
    @Schema(description = "请求路径参数")
    private String pathParameter;

    /**
     * 请求查询参数
     */
    @Schema(description = "请求查询参数")
    private String queryParameter;

    /**
     * 请求体参数
     */
    @Schema(description = "请求体参数")
    private String bodyParameter;

    /**
     * 响应参数
     */
    @Schema(description = "响应参数")
    private String responseParameter;

    /**
     * 请求uri
     */
    @Schema(description = "请求uri")
    private String uri;

    /**
     * 请求ip
     */
    @Schema(description = "请求ip")
    private String ip;

    /**
     * 操作人id
     */
    @Schema(description = "操作人id")
    private Long operatorId;

    /**
     * 操作人名称
     */
    @Schema(description = "操作人名称")
    private String operatorName;

    /**
     * 操作人账号
     */
    @Schema(description = "操作人账号")
    private String operatorUsername;

    /**
     * 审计级别
     * 0: 普通操作
     * 1: 重要操作
     * 2: 敏感操作
     * 3: 核心操作
     */
    @Schema(description = "审计级别")
    private Integer level;

    /**
     * 业务标签，多个标签以逗号分隔
     */
    @Schema(description = "业务标签")
    private String tags;

    /**
     * 操作状态，0成功，1失败
     */
    @Schema(description = "操作状态，0成功，1失败")
    private Integer success;

    /**
     * 创建人id
     */
    @Schema(description = "创建人id")
    private Long createBy;

    /**
     * 创建时间
     */
    @Schema(description = "创建时间")
    private LocalDateTime createTime;

    /**
     * 更新人
     */
    @Schema(description = "更新人")
    private Long updateBy;

    /**
     * 更新时间
     */
    @Schema(description = "更新时间")
    private LocalDateTime updateTime;

    /**
     * 会话ID
     */
    @Schema(description = "会话ID")
    private String sessionId;

    /**
     * 用户代理信息
     */
    @Schema(description = "用户代理信息")
    private String userAgent;

    /**
     * 执行时长(毫秒)
     */
    @Schema(description = "执行时长(毫秒)")
    private Long executionTime;

}
